// 导出一个函数，用于验证数量
export function validateQuantity(target: any, key: string) {
  // 获取目标对象的属性值
  let value = target[key]
  // 定义一个getter函数，用于获取属性值
  const getter = function () {
    return value
  }
  // 定义一个setter函数，用于设置属性值
  const setter = function (newValue: number) {
    // 如果新值小于0，抛出错误
    if (newValue < 0) {
      throw new Error('Quantity cannot be negative')
    }
    // 否则，将新值赋给属性值
    value = newValue
  }

  // 使用Object.defineProperty方法，将getter和setter函数应用到目标对象的属性上
  Object.defineProperty(target, key, {
    get: getter,
    set: setter,
    enumerable: true,
    configurable: true
  })
}

/**
 * 只读属性装饰器
 * @param target 目标对象
 * @param key 属性名
 */
export function readonly(target: any, key: string) {
  // 创建一个属性描述符，将writable属性设置为false，表示属性不可写
  const descriptor: PropertyDescriptor = {
    writable: false
  }
  // 使用Object.defineProperty方法，将属性描述符应用到目标对象上
  Object.defineProperty(target, key, descriptor)
}
